package com.example.backgroundmanger.utils;

import com.example.backgroundmanger.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import jakarta.servlet.http.HttpServletRequest;

/**
 * 用户上下文工具类
 * 用于在控制器中获取当前登录用户信息
 * 
 * 注意：此类使用ThreadLocal机制，每个HTTP请求都在独立的线程中处理，
 * 因此不会出现多用户登录信息错乱的问题。
 */
@Slf4j
public class UserContext {

    /**
     * 获取当前登录用户
     * @return 当前用户信息，如果未登录则返回null
     */
    public static User getCurrentUser() {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes == null) {
            log.debug("UserContext - RequestAttributes为空，当前线程: {}", Thread.currentThread().getName());
            return null;
        }
        
        HttpServletRequest request = attributes.getRequest();
        Object currentUser = request.getAttribute("currentUser");
        
        if (currentUser instanceof User) {
            User user = (User) currentUser;
            log.debug("UserContext - 获取用户成功，用户: {}, 线程: {}", 
                user.getUsername(), Thread.currentThread().getName());
            return user;
        }
        
        log.debug("UserContext - 未找到用户信息，线程: {}", Thread.currentThread().getName());
        return null;
    }

    /**
     * 获取当前登录用户ID
     * @return 用户ID，如果未登录则返回null
     */
    public static Integer getCurrentUserId() {
        User user = getCurrentUser();
        return user != null ? user.getId() : null;
    }

    /**
     * 获取当前登录用户名
     * @return 用户名，如果未登录则返回null
     */
    public static String getCurrentUsername() {
        User user = getCurrentUser();
        return user != null ? user.getUsername() : null;
    }
} 